import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
public class lengthOfLongestSubstring {
//    public int lengthOfLongestSubstring(String s) {
//        Set<Character> set = new HashSet<>();
//        int len = s.length();
//        int i = 0,j = 0,max = 0;
//        while (i < len && j < len){
//            if(!set.contains(s.charAt(j))){
//                set.add(s.charAt(j));
//                j++;
//                max = Math.max(max,j - i);
//
//            }else{
//                set.remove(s.charAt(i));
//                i++;
//            }
//        }
//        return max;
//    }
public int lengthOfLongestSubstring(String s){
    Map<Character,Integer> map = new HashMap<>();
    int i = 0,j = 0,max = 0;
    while (j < s.length()){
        char ch = s.charAt(j);
        if(map.containsKey(ch) && map.get(ch) >= i){
            i = map.get(ch) + 1;
        }
        map.put(ch,j);
        max = Math.max(max,j - i + 1);
        j++;
    }
    return max;
}
}
